<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>周六日程序题</title>
</head>
<body>
    <script>
        // 1、
        // for(var i=1;i<=5; i++){
        //     (function(i){
        //         setTimeout(function timer(){
        //             console.log(i);
        //         },i*1000)
        //     })(i)
        // }
        // console.log(i);
        // 输出的结果：6,1,2,3,4,5
        // 解释：for循环是同步代码，setTimeout是异步代码 因为for循环的结束条件是 i<=5，所以当循环满足结束条件时 i 是6。
        // 接着执行满足条件1<=5的代码 1 2 3 4 5 
        // setTimeout定时器是异步操作 所以输出的是1 2 3 4 5 


        // 2、
        var obj1={a:1,b:2,c:3,d:{e:4}}
        var obj2 = {...obj1}
        obj1.a = 2
        obj1.d.e = 5
        console.log(obj2);
        // 输出结果obj.a 1,2,3,
         //展开运算符对单层是浅拷贝 对多层是深拷贝


        //  3、
        // setTimeout(function(){
        //     console.log(1);
        // },0)
        // new Promise(function(resolve){
        //     console.log(2);
        //     resolve()
        //     console.log(3);
        // }).then(function(){
        //     console.log(4);
        // })
       // 输出结果:2 3 4 1
       //解释：setTimeout是一个宏任务，扔到了异步宏任务队列当中。代码向下执行
       //其次遇到 new Promise() 当中的传入一个函数function是一个函数所以会立即执行，===>2
       // 接着是一个成功回调 执行 ===>3
       // .then属于是微任务 当执行完同步的宏任务执行完毕后 执行 .then ===>4
       //最后执行 定时器 setTimout


    //    4、
    // 1、new Set()方法
    // const arr=[12,24,37,24,49,49,55,68]
    // const s = new Set(arr)
    // console.log([...s]);
    // 解释　因为，ES6 提供了新的数据结构 Set。它类似于数组，但是成员的值都是唯一的，没有重复的值。

// 　　所以，可以做出这样的方法；


    // 2、Map()
    // const arr=[12,24,37,24,49,49,55,68]
    // const m = new Map()
    // const arr1 = []
    // for(let i=0;i<arr.length; i++){
    //     m.set(arr[i],'key')
    // }
    // console.log(m);
    // m.forEach((value,key)=>{
    //     arr1.push(key)
    // })
    // console.log(arr1);
    

    // var arr1 = [12,24,37,24,49,49,55,68];
    //     arr1 = arr1.reduce((item,next)=>{
    //     item.indexOf(next)>-1?'':item.push(next)
    //     return item
    //     },[]);
    //     console.log(arr1);

    //  4、 indexOf
    // 定义一个空的数组用来存放符合条件的数字
    // 通过for循环 遍历数组 判断符合条件数字的下标 并将符合条件的数字 放到新的数组里面
     // 作用：查找指定元素的位置
    // 返回值：返回第一次查到的索引，未找到返回-1
// 是否改变原数组： 不改变
        // var arr=[12,24,37,24,49,49,55,68];
        // var arr1=[];
        // for(var i=0;i<arr.length;i++){
        //     if(arr1.indexOf(arr[i])==-1){
        //         arr1.push(arr[i]);
        //     }
        // }
        // console.log(arr1);


    </script>
</body>
</html>